﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Metriks.Parsiranje.Klase;

namespace Metriks.Metrike.MetrikaLOC
{
    class LOCMetrika
    {
        List<LOC> lista;
        public LOCMetrika(List<LOC> lista) {
            this.lista = lista;
        }
        public int getUkupanBroj() {
            return lista.Count;
        }
        public int getBrojKomentara() {
            int brojac = 0;
            foreach (LOC l in lista) {
                if (l.GetType() == typeof(Comment)) brojac++;
            }
            return brojac;
        }
        public int getBrojpraznih() {
            int brojac = 0;
            foreach (LOC l in lista)
            {
                if (l.GetType() == typeof(emptyLine)) brojac++;
            }
            return brojac;
        }
        public int getBrojIzvrsnih() {
            return getUkupanBroj() - (getBrojKomentara() + getBrojpraznih());
        }
        public int getBrojIskaza() {
            int brojac = 0;
            foreach (LOC l in lista)
            {
                if (l.GetType() == typeof(varAssign)) brojac++;
                if (l.GetType() == typeof(varInit)) brojac++;
                if (l.GetType() == typeof(beginWhile)) brojac++;
                if (l.GetType() == typeof(beginIf)) brojac++;
                if (l.GetType() == typeof(elseIf)) brojac++;
                if (l.GetType() == typeof(returnLOC)) brojac++;
            }
            return brojac;
        }
        public int getBrojDefinicijaPodataka() {
            int brojac = 0;
            foreach (LOC l in lista)
            {
                if (l.GetType() == typeof(varInit)) brojac++;
                if (l.GetType() == typeof(varDecl)) brojac++;
                if (l.GetType() == typeof(beginFunction)) brojac++;
            }
            return brojac;
        }
        public String assess()
        {
            String poruka = "";
            poruka = poruka + "Ukupan broj linija kôda: " + getUkupanBroj().ToString() + Environment.NewLine;
            poruka = poruka + "Broj komentara: " + getBrojKomentara().ToString() + Environment.NewLine;
            poruka = poruka + "Broj praznih linija: " + getBrojpraznih().ToString() + Environment.NewLine;
            poruka = poruka + "Broj izvršivih linija: " + getBrojIzvrsnih().ToString() + Environment.NewLine;
            poruka = poruka + "Broj definicija podataka: " + getBrojDefinicijaPodataka().ToString() + Environment.NewLine;
            poruka = poruka + "Broj iskaza: " + getBrojIskaza().ToString();
            return poruka;
        }
    }
}
